GtkWindow: Create renderer before realizing child widgets
authorAlexander Larsson <alexl@redhat.com>
Mon, 28 Sep 2020 18:47:32 +0000 (20:47 +0200)
committerAlexander Larsson <alexl@redhat.com>
Tue, 29 Sep 2020 07:51:16 +0000 (09:51 +0200)
This way the child widgets can rely on the renderer (for example what
type it is) to decide details about how they render (such as if they
should use OpenGL shaders).

gtk/gtkwindow.c

index aecafe43bed82b706f4d9347552b86966aa8fc59..947b178f76d505cc254627c83aec530da4e44d10 100644 (file)
@@ -4387,6 +4387,9 @@ gtk_window_realize (GtkWidget *widget)
   priv->surface = surface;
   gdk_surface_set_widget (surface, widget);
 
+  if (priv->renderer == NULL)
+    priv->renderer = gsk_renderer_new_for_surface (surface);
+
   g_signal_connect_swapped (surface, "notify::state", G_CALLBACK (surface_state_changed), widget);
   g_signal_connect_swapped (surface, "size-changed", G_CALLBACK (surface_size_changed), widget);
   g_signal_connect (surface, "render", G_CALLBACK (surface_render), widget);
@@ -4397,9 +4400,6 @@ gtk_window_realize (GtkWidget *widget)
 
   gtk_root_start_layout (GTK_ROOT (window));
 
-  if (priv->renderer == NULL)
-    priv->renderer = gsk_renderer_new_for_surface (surface);
-
   if (priv->transient_parent &&
       _gtk_widget_get_realized (GTK_WIDGET (priv->transient_parent)))
     {